package main

import "fmt"

/**
 * @author tang
 */
func main() {
	// 创建map
	m, _, _ := createMap()
	// 遍历map
	traversingMap(m)

	// 获取特定的值
	gettingValue(m)

	// 删除特定的值
	deleteValues(m)
}

/**
 * 创建map并赋初始值
 */
func createMap() (map[string]string, map[string]int, map[string]int) {
	fmt.Println("======Create map======")
	// 创建map并赋初始值
	m := map[string]string{
		"name":   "tang",
		"course": "golang",
		"age":    "18",
		"sex":    "man",
	}
	fmt.Println(m)
	// 使用make创建map
	m2 := make(map[string]int) // m2 ==empty map
	// 直接创建
	var m3 map[string]int // m3 == nil
	fmt.Println(m, m2, m3)

	return m, m2, m3
}

/**
 * 遍历map
 */
func traversingMap(m map[string]string) {
	fmt.Println("======Traversing map======")
	// k 在map中是无序的，打印出来的顺序每次都不一样
	for k, v := range m {
		fmt.Println(k, v)
	}
}

/**
 * 获取map中特定的值, 可接收第二个参数，判断key是否存在
 */
func gettingValue(m map[string]string) {
	fmt.Println("======Getting values======")
	courseName, ok := m["course"]
	fmt.Println(courseName, ok)
	cases, ok := m["case"]
	fmt.Println(cases, ok)
}

/**
 * 删除特定的值
 */
func deleteValues(m map[string]string) {
	fmt.Println("======Delete values======")
	name, ok := m["name"]
	fmt.Println(name, ok)
	delete(m, "name")
	name, ok = m["name"]
	fmt.Println(name, ok)
}
